package net.csdn.business.kanban.common.domain.DTO;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import net.csdn.business.kanban.common.enums.UserTypeEnum;

import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserVo {
    /**
     * 用户ID
     */
    private String id;
    /**
     * 用户名
     */
    private String username;

    /**
     * 姓名
     */
    private String name;
    /**
     * 生日
     */
    private String birthdate;
    /**
     * 昵称
     */
    private String nickname;
    /**
     * 用户状态
     */
    private String status;
    /**
     * 性别
     */
    private String gender;
    /**
     * 手机号
     */
    private String phone;
    /**
     * 是否验证手机
     */
    private Boolean phoneVerified;
    /**
     * 邮箱
     */
    private String email;
    /**
     * 是否验证邮箱
     */
    private Boolean emailVerified;
    /**
     * 头像
     */
    private String photo;
    /**
     * 个站
     */
    private String website;
    /**
     * 公司
     */
    private String company;
    /**
     * 省份
     */
    private String province;
    /**
     * 地市
     */
    private String region;
    /**
     * 所在地
     */
    private String address;
    /**
     * 简介
     */
    private String profile;
    /**
     * 用户注册时间
     */
    private String createdAt;
    /**
     * 更新时间
     */
    private String updatedAt;
    /**
     * 三方授权列表
     */
    List<UserAuthIdentityVo> identities;
    /**
     * 最后登录IP
     */
    private String lastIP;
    /**
     * 最后登录时间
     */
    private String lastLogin;
    /**
     * 登录次数
     */
    private String loginsCount;


    /*************** 拓展字段 ***************/
    /**
     * 是否隐藏邮箱 1-隐藏 0或者null-显示
     */
    private String hideEmail;
    /**
     * 密码最近修改时间 yyyy-MM-dd HH:mm:ss
     */
    private String lastPwdUpdateTime;
    /**
     * 审核状态
     */
    private String checkStatus;
    /**
     * 用户命名空间
     */
    private String nameSpacePath;
    /**
     * 角色 Admin（管理员）、Operator（运营）、Auditor（审核员）
     */
    private String adminRoleCode;
    /**
     * 用户归属appId
     */
    private String userSourceId;

    /***** 叠加字段 *****/
    // 是否关注 1-是 0-否
    private Integer isAttention;
    // 代码库数量
    private Long repoNum;
    // 当前是否为模拟用户
    private Boolean isSimulate;
    private String simulateUserId;
    private String simulateUsername;
    /**
     * 用户设置的国际化默认语言
     */
    private String defaultLang;
    /**
     * 注销
     */
    private boolean logout = false;

    /**
     * 虚拟字段，没有持久化到数据库 {@link net.csdn.business.kanban.common.enums.UserTypeEnum}
     */
    private Integer userType = UserTypeEnum.USER.getType();

    public UserVo(String nickname, String photo) {
        this.nickname = nickname;
        this.photo = photo;
        this.logout = true;
    }

    public UserVo(String id, String username, String nickname, String email) {
        this.id = id;
        this.username = username;
        this.nickname = nickname;
        this.email = email;
    }
}